/*
 * @Author: chen haoxuan
 * @Date: 2021-05-21 22:13:24
 * @LastEditTime: 2021-05-21 22:49:39
 */
// 4.4 运算符重载函数作为类成员函数和友元函数
/*
    对运算符重载的函数有两种处理方式:
        (1) 把运算符重载的函数作为类的成员函数
        (2) 运算符重载函数不是类的成员函数(可以是一个普通函数),在类中把它声明为友元函数。
*/
// 如果将运算符重载函数作为成员函数，它可以通过this指针自由地访问本类的数据成员，因此可以少写一个函数的参数
#include<iostream>
using namespace std;
class Complex
{
    public:
        Complex(){real=0;imag=0;}
        Complex(double r,double i){real=r;imag=i;}
        friend Complex operator+(Complex &c1,Complex &c2);
        void display();
    private:
        double real;
        double imag;
};
Complex operator+(Complex &c1,Complex &c2)
{
    return Complex(c1.real+c2.real,c1.imag+c2.imag);
}
void Complex::display()
{
    cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
int main()
{
    Complex c1(3,4) ,c2(5,-10),c3;
    c3=c1+c2;
    cout<<"c1=";c1.display();
    cout<<"c2=";c2.display();
    cout<<"c1+c2=";c3.display();
    system("pause");
    return 0;
}
